import {
	defineStore
} from "pinia";
import io from "@hyoga/uni-socket.io";
import {
	useStore
} from "../stores/index"

export const useSocket = defineStore("cs.socket", () => {
	const {
		user
	} = useStore();

	// const baseUrl = "wss://demo.soullightstheworld.com"
	const baseUrl = "wss://appapi.ivmcr.com"

	let client = null;


	// 连接
	async function connect(callback) {
		// if (client) {
		// 	disconnect();
		// }

		if (!client) {
			const token = uni.getStorageSync('token')

			// client = io(baseUrl, {
			// 	cors: {
			// 		origin: "*",
			// 		methods: ["GET", "POST"]
			// 	},
			// 	transports: ['websocket', 'polling'],
			// 	timeout: 5000,

			// 	reconnection: true, // 开启自动重连
			// 	reconnectionAttempts: Infinity, // 最大重连次数
			// 	reconnectionDelay: 15000, // 重连间隔时间
			// 	reconnectionDelayMax: 20000, // 最大重连间隔时间
			// 	randomizationFactor: 0.5 // 随机化因子

			// 	// query:{
			// 	// 	auth:token
			// 	// }
			// 	// auth: {
			// 	// 	isAdmin: false,
			// 	// 	token: token,
			// 	// },
			// });

			// client.on("connect", () => {
			// 	console.log("[cs] connect");
			// 	console.log(client.id);

			// 	// 设置心跳间隔，默认是25秒
			// 	client.io.engine.pingInterval = 25000;
			// 	// 设置心跳超时时间，默认是25秒
			// 	client.io.engine.pingTimeout = 25000;
			// 	// 监听ping事件，即心跳检测
			// 	client.on('ping', () => {
			// 		console.log('Heartbeat received.');
			// 	});
			// 	// 监听pong事件，即心跳响应
			// 	client.on('pong', (latency) => {
			// 		console.log('Heartbeat acknowledged with latency: ' + latency + 'ms.');
			// 	});

			// 	// client.emit('authentication', {
			// 	// 	auth: token
			// 	// });
			// 	// client.on('authenticated', function() {
			// 	// 	console.log("认证成功")
			// 	// });


			// 	if (callback) {
			// 		callback(client);
			// 	}


			// });

			// client.on('authenticated', function() {
			// 	console.log(1111);
			// });

			// uni.showLoading({
			// 	title: "加载中",
			// 	mask: true
			// })

			client = await new Promise((resolve) => {
				const socket = io(baseUrl, {
					cors: {
						origin: "*",
						methods: ["GET", "POST"]
					},
					transports: ['websocket'],
					timeout: 5000,

					reconnection: true, // 开启自动重连
					reconnectionAttempts: Infinity, // 最大重连次数
					reconnectionDelay: 1000, // 重连间隔时间
					reconnectionDelayMax: 5000, // 最大重连间隔时间
					randomizationFactor: 0.5, // 随机化因子

					pingInterval: 30000, // 每隔 30 秒发送一次心跳包
					pingTimeout: 5000 // 如果在 5 秒内未收到心跳响应，则认为连接中断

				});

				//, 'polling'

				socket.on('connect', () => {
					console.log('connect to server!');
					console.log(socket.id);

					// uni.hideLoading();

					// 设置心跳间隔，默认是25秒
					socket.io.engine.pingInterval = 25000;
					// 设置心跳超时时间，默认是25秒
					socket.io.engine.pingTimeout = 25000;


					socket.emit('authentication', {
						auth: token
					});
					socket.on('authenticated', function() {
						console.log("认证成功")
					});

					// 监听ping事件，即心跳检测
					socket.on('ping', () => {
						console.log('Heartbeat received.');
					});
					// 监听pong事件，即心跳响应
					socket.on('pong', (latency) => {
						console.log('Heartbeat acknowledged with latency: ' +
							latency + 'ms.');

						socket.emit("ping", {})
					});

					// socket.emit('authentication', {
					// 	auth: token
					// });

					// socket.on('pong', () => {
					// 	console.log("2")
					//   client.emit('ping')
					// })
					resolve(socket);
				});
			});

			// client.on('connection', (socket) => {
			// 	socket.on('join', (room) => {
			// 		socket.join(room);
			// 		console.log(`客户端已加入房间 ${room}`);
			// 	});
			// });


			client.on('connect_error', function(error) {
				console.log("[cs] connect_error", error);
			});

			client.on("disconnect", () => {
				console.log("[cs] disconnect");
			});

			if (callback) {
				callback(client);
			}

			// client.on('event', console.log);

			// client.on("event", (data) => {
			// 	console.log(data);
			// 	if (callback) {
			// 	}

			// 	// if (data.type == 1) {
			// 	// 	if (data.sessionId == session.info?.id) {
			// 	// 		// 追加消息
			// 	// 		message.append({
			// 	// 			...data.user,
			// 	// 			...data,
			// 	// 			isAnimation: true,
			// 	// 		});

			// 	// 		// 读消息
			// 	// 		message.read(data.id!);
			// 	// 	}
			// 	// }
			// });
		}
	}

	// 断开连接
	function disconnect() {
		client?.disconnect();
		client = undefined;
	}

	//发起消息
	function event(content) {
		if (client) {
			// 发送事件
			client.emit("event", content);
		} else {
			console.log("[cs] client error");
		}
	}

	//群消息
	function say(content) {
		if (client) {
			// 发送事件
			client.emit("say", JSON.stringify(content));
		} else {
			console.log("[cs] client error");
		}
	}

	//加入群聊
	function joinRoom(content) {

		if (client) {
			// 发送事件
			client.emit("join-room", JSON.stringify(content));
		} else {
			console.log("[cs] client error");
		}
	}

	// 监听退出
	uni.$on("user.logout", () => {
		disconnect();
	});

	return {
		connect,
		client,
		event,
		say,
		joinRoom
	};
}, {
	unistorage: true, // 开启后对 state 的数据读写都将持久化
});